04 - Sistema de disparos e vida do inimigo

Agora que nosso jogador possui HP e pode ativamente perder o jogo, precisamos fazer o mesmo para nossos inimigos: Se eles chegarem a zero de vida, são destruídos e, futuramente, podem entregar XP ou itens ao jogador.

Vamos começar definindo um valor de vida no inimigo0. Em um evento de Criar, adicione o seguinte código:

hp = 10;

Também vamos definir que, ao ficar com 0 ou menos de vida, ele é destruído. Adicione o código a seguir no evento Etapa:

if hp <= 0{
	instance_destroy();
}

Com isso feito, vamos agora criar um objeto com o nome arma0. Ele não terá sprites. Após criá-lo já pode colocar na sala do jogo.

Nele, criaremos alguns eventos: Criar, Etapa e Alarme 0.

Código do Criar:

dano = 10;
vel = 5;
delay = 1;

Código do Etapa:

x = player.x;
y = player.y;

if alarm[0] < 0 {
	var proj = instance_create_layer(x,y,"Instances",proj0);
	proj.speed = vel;
}

Deixaremos o Alarme 0 vazio por enquanto.


Além da arma0, crie um novo objeto de nome proj0. Este será o projétil a ser disparado pela arma. Não precisa adicionar ele na fase já que será criado apenas quando a arma disparar.

Nele, criaremos dois eventos: Criar e Colisão -> inimigo0.

Código do Criar:

// Deixe vazio por enquanto

Código do Colisão -> inimigo0:

other.hp -= 10;
instance_destroy();

Disparo na direção do jogador:

Proj0 - Código do Criar:

direction = player.direction;

Disparo na direção do mouse:

Proj0 - Código do Criar:

direction = point_direction(x,y,mouse_x,mouse_y)

Disparo na direção do inimigo mais próximo.

Proj0 - Código do Criar:

// DEIXE O CRIAR VAZIO

arma0 - Código do Criar (adicione essa linha):

alvos = ds_list_create();

arma0 - Código do etapa (substitua tudo por esse código):

x = player.x
y = player.y

if alarm[0] < 0 {
	collision_circle_list(x,y,100,inimigo0,false,false,alvos,true);
	if ds_list_size(alvos) != 0 {
		var inimigoAlvo = ds_list_find_value(alvos,0);
		var proj = instance_create_layer(x,y,"Instances",proj0);
		proj.speed = vel;
		proj.direction = point_direction(x,y,inimigoAlvo.x,inimigoAlvo.y);
		alarm[0] = game_get_speed(gamespeed_fps) * delay;
	}

}

arma0 - Código do Alarme 0 (adicione essa linha):

ds_list_clear(alvos)